#ifndef __SERVER_H__
#define __SERVER_H__
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>     // memset
#include <sys/types.h>  
#include <sys/socket.h>
#include <netinet/in.h> // 信息结构体struct sockaddr_in
#include <signal.h>
#include <netinet/in.h>	//inet_aton
#include <arpa/inet.h>
#include <unistd.h>	// fork
#include <sys/wait.h>
#include <sys/epoll.h>


/*数据库文件名字*/
#define FILEname "ser.db"

#define ERRLOG(errmsg)                                       \
	do                                                       \
	{                                                        \
		printf("%s--%s(%d):", __FILE__, __func__, __LINE__); \
		perror(errmsg);                                      \
	} while (0)

#define R 1 //  user register注册
#define L 2 //  user login登录
#define Q 3 //  query word查询
#define M 4 //  修改
#define ROOT 5 // root
#define D 6 // 删除
#define Qall 7 // 查询所有


#define N 32 
//信息结构体
typedef struct
{
	int type;		//选择
	int id;
	char name[N];	//用户名
	char pass[64];// password密码
	char data[256]; //emark返回数据
	char sex[32];
	int age;
	int pay;
	char job[64];
}MSG;

//登录成功信息结构体
typedef struct
{
	int accept_fd;		//选择
	int id;
	int ord_accept_fd;
}LOG_SUCC;

// 1. 数据库初始化 ---打开数据文件、建表
sqlite3 *proc_init(void);

//创建套接字-填充服务器网络信息结构体-绑定-监听
int socket_bind_listen(const char *argv[]);

// 子进程执行
int child_do(int accept_fd, sqlite3 *sql_db);

// 信号处理函数  用于回收子进程资源
void deal_signal(int s);

// 1. 注册
void do_register_s(int accept_fd, MSG *msg, sqlite3 *sql_db);

// 2. 登录
void do_login_s(int accept_fd, MSG *msg, sqlite3 *sql_db);

// 3. 查询
void do_query_s(int accept_fd, MSG *msg, sqlite3 *sql_db);

// 4. 修改
void do_Modify_s(int accept_fd, MSG *msg, sqlite3 *sql_db);

// 5. ROOT登录
void root_login_s(int accept_fd, MSG *msg, sqlite3 *sql_db);

//6. 删除
void root_delete_s(int accept_fd, MSG *msg, sqlite3 *sql_db);

// 7. 查询所有
void all_query_s(int accept_fd,sqlite3 *sql_db);

#endif